package com.ys.service.finance;

import com.ys.entity.business.TbBaseInfo;
import com.ys.entity.finance.TcwFinancialTransactionTypeItem;
import com.ys.vo.R;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

/**
 * 财务交易流水
 */
public interface TcwFinancialTransactionFlowService {

	/**
	 * 判断金额是否充足；新增流水、并修改对应公司银行账户实时资金管理
	 * @param isCheckCapital 是否判断资金是否充足，是true、否false（若为否，并扣除资金可能为负）
	 * @param companyBankInfoId 公司银行账户管理表id（TB_CompanyBankInfo）
	 * @param transactionTypeBid 业务交易类型bid（TB_BaseInfo）
	 * @param vyhzhmc 对方账户名称
	 * @param vkhh 对方账户开户行
	 * @param vyhzh 对方银行账户编码
	 * @param originalTransactionAmount 交易金额
	 * @param occurTime 交易发生时间
	 * @param auditingTime 交易审核时间
	 * @param writeTime 记账时间
	 * @param remark 备注
	 * @param fromType 来源表单类型(见枚举类：TcwFinancialTransactionFlowEnum)
	 * @param fromId 来源表单id
	 * @return R SUCCESS("成功", 0), FAILED("失败", 1); 失败原因：R.getMsg()
	 * @throws Exception
	 */
	R add(boolean isCheckCapital, Long companyBankInfoId, String transactionTypeBid,
		  String vyhzhmc, String vkhh, String vyhzh, BigDecimal originalTransactionAmount,
		  Date occurTime,Date auditingTime,Date writeTime,String remark,
		  int fromType,Long fromId) throws Exception ;


	/**
	 * 获取业务交易类型对应信息
	 */
	TbBaseInfo getTransactionType(String transactionTypeStr) throws Exception ;

	/**
	 * 判断资金是否充足
	 * @param companyBankInfoId 公司银行账户管理表id（TB_CompanyBankInfo）
	 * @param originalTransactionAmount 交易金额（一般为负）
	 * @return 是：true ； 否false
	 */
	boolean isCapital(Long companyBankInfoId,BigDecimal originalTransactionAmount) throws Exception ;



}